package top.yj95.xiets.panel;

import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

/**
 * 文章《<a href="https://blog.csdn.net/xietansheng/article/details/74366541" target="_balnk">JavaSwing_3.4: JTabbedPane（选项卡面板）</a>》中的示例代码
 * @author 杨军
 * @since 2023-12-26
 */
public class JTabbedPaneDemo {

    public static void main(String[] args) {
        JFrame frame = new JFrame("测试窗口");
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        // 创建选项卡面板
        JTabbedPane tabbedPane = new JTabbedPane();
        
        // 创建第 1 个选项卡（选项卡只包含 标题）
        tabbedPane.addTab("Tab01", createTextPanel("TAB 01"));
        
        /*
         * 下列图标来自：https://www.iconfont.cn/collections/detail?spm=a313x.collections_index.i1.d9df05512.7d623a81Ds0JCn&cid=47453
         * 作者：QiaoA
         * 库名：数据中台系统一级/二级icon
         */
        // 创建第 2 个选项卡（选项卡包含 标题 和 图标）
        ImageIcon tabImg2 = new ImageIcon(JTabbedPaneDemo.class.getResource("/assets/images/jtabbed/project_manager.png"));
        tabbedPane.addTab("Tab02", tabImg2, createTextPanel("TAB 02"));
        
        // 创建第 3 个选项卡（选项卡包含 标题、图标 和 tip 提示）
        ImageIcon tabImg3 = new ImageIcon(JTabbedPaneDemo.class.getResource("/assets/images/jtabbed/data_std.png"));
        tabbedPane.addTab("Tab03", tabImg3, createTextPanel("TAB 03"), "This is a tab.");
        
        // 添加选项卡选中状态改变的监听器
        tabbedPane.addChangeListener(e -> System.out.printf("当前选中的选项卡：%d\n", tabbedPane.getSelectedIndex()));
        
        // 设置默认选中的选项卡
        tabbedPane.setSelectedIndex(1);
        
        frame.setContentPane(tabbedPane);
        frame.setVisible(true);
    }
    
    /**
     * 创建一个面板，面板中心显示一个标签，用于表示某个选项卡需要显示的内容
     * @param text 要显示的内容
     * @return 创建好的面板组件
     * @author 杨军
     * @since 2023-12-26
     */
    private static JComponent createTextPanel(String text) {
        // 创建面板，使用一个 1行1列 的风格布局（为了让标签的宽高自动撑满面板）
        JPanel panel = new JPanel(new GridLayout(1, 1));
        
        // 创建标签
        JLabel label = new JLabel(text);
        label.setFont(new Font(null, Font.PLAIN, 50));
        label.setHorizontalAlignment(SwingConstants.CENTER);
        
        // 添加标签到面板
        panel.add(label);
        
        return panel;
    }
    
}
